home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / videocap / videocap.bas < prev    next >
BASIC Source File  |  1995-08-22  |  10KB  |  333 lines

  1. 1000 '--------------------------------------------------------------------
  2. 1010 '取り込みアニメーション作成支援ソフト
  3. 1020 '「画像取り込み支援」
  4. 1030 'By 福地健太郎
  5. 1040 '1995 8 12
  6. 1050 '--------------------------------------------------------------------
  7. 1060 '
  8. 1070 '初期設定
  9. 1080 '機械語プロシジャの読込
  10. 1090 CLEAR ,,,,754-512
  11. 1100 LOADM "meanfilt.rex",0
  12. 1110 '
  13. 1120 DEFINT A-Z
  14. 1130 SCREEN 0
  15. 1140 SCREEN@ 1
  16. 1150 '
  17. 1160 DIM BASEPIC(320*240*3-1), NEWPIC(320*240-1)
  18. 1170 BASEPIC_PTR& = VARPTR(BASEPIC(0))
  19. 1180 NEWPIC_PTR&  = VARPTR(NEWPIC(0))
  20. 1190 '
  21. 1200 'パラメーターの初期設定
  22. 1210 SAVE_DRV$  = "d:"
  23. 1220 SAVE_DIR$  = "\"
  24. 1230 SAVE_FILE$ = "temp"
  25. 1240 '
  26. 1250 HTONE    = 0
  27. 1260 USE_MF   = 0
  28. 1270 MF_NUM   = 16
  29. 1280 MF_GAIN! = 1!
  30. 1290 '
  31. 1300 '=== Main Menu ===
  32. 1310 *MENU_LOOP
  33. 1320     CLS
  34. 1330     PRINT "(1) 格納先のディレクトリパス",SAVE_DRV$+SAVE_DIR$
  35. 1340     PRINT "(2) 保存ファイル名",SAVE_FILE$+"???.tif"
  36. 1350     PRINT "(3) 平均値フィルター";
  37. 1360     IF USE_MF = 1 THEN
  38. 1370         PRINT "使用する"
  39. 1380         PRINT "(4) サンプリング枚数",MF_NUM
  40. 1390         PRINT "(5) ゲイン調整値",MF_GAIN!
  41. 1400     ELSE
  42. 1410         PRINT "使用しない"
  43. 1420     ENDIF
  44. 1430     PRINT
  45. 1440     PRINT "(8) テスト取り込み"
  46. 1450     PRINT "(9) 本番"
  47. 1460     PRINT "(0) 終了"
  48. 1470     INPUT "変更・実行する項目を選んで入力してください。",SEL
  49. 1480 '
  50. 1490     IF SEL = 1 THEN
  51. 1500         GOSUB *GET_PATH
  52. 1510     ELSE IF SEL = 2 THEN
  53. 1520         GOSUB *GET_FILENAME
  54. 1530     ELSE IF SEL = 3 THEN
  55. 1540         GOSUB *GET_USEMF
  56. 1550     ELSE IF SEL = 4 THEN
  57. 1560         GOSUB *GET_MFNUM
  58. 1570     ELSE IF SEL = 5 THEN
  59. 1580         GOSUB *GET_MFGAIN
  60. 1590     ELSE IF SEL = 8 THEN
  61. 1600         GOSUB *TEST_INPUT
  62. 1610     ELSE IF SEL = 9 THEN
  63. 1620         GOSUB *VIDEO_INPUT
  64. 1630     ENDIF
  65. 1640     IF SEL<>0 THEN *MENU_LOOP
  66. 1650 '
  67. 1660 END
  68. 1670 '
  69. 1680 *GET_PATH
  70. 1690 *L_GET_DRV
  71. 1700     ERR_CHK = 0
  72. 1710     PRINT "格納先のドライブ名を入力してください。(現在は";SAVE_DRV$;")";
  73. 1720     INPUT TEMP_DRV$
  74. 1730     IF TEMP_DRV$ <> "" THEN
  75. 1740         TEMP_DRV$ = LEFT$(TEMP_DRV$, 1) + ":"
  76. 1750         TEST_DRV$ = TEMP_DRV$
  77. 1760         GOSUB *TEST_DRV
  78. 1770         IF TEST_ERR <> 0 THEN
  79. 1780             ERR_CHK = 1
  80. 1790         ELSE
  81. 1800             ERR_CHK = 0
  82. 1810             SAVE_DRV$ = TEMP_DRV$
  83. 1820         ENDIF
  84. 1830     ENDIF
  85. 1840     IF ERR_CHK <> 0 THEN *L_GET_DRV
  86. 1850 *L_GET_DIR
  87. 1860     ERR_CHK = 0
  88. 1870     PRINT "格納先のディレクトリを入力してください。(現在は";SAVE_DIR$;")";
  89. 1880     INPUT TEMP_DIR$
  90. 1890     IF TEMP_DIR$ <> "" THEN
  91. 1900         IF RIGHT$(TEMP_DIR$, 1) = "\" THEN
  92. 1910             IF LEN(TEMP_DIR$) > 1 THEN
  93. 1920                 TEMP_DIR$ = LEFT$(TEMP_DIR$, LEN(TEMP_DIR$)-1)
  94. 1930             ENDIF
  95. 1940         ENDIF
  96. 1950         TEST_PATH$ = SAVE_DRV$ + TEMP_DIR$
  97. 1960         GOSUB *TEST_PATH
  98. 1970         IF TEST_ERR <> 0 THEN
  99. 1980             ERR_CHK = 1
  100. 1990         ELSE
  101. 2000             ERR_CHK = 0
  102. 2010             SAVE_DIR$ = TEMP_DIR$
  103. 2020         ENDIF
  104. 2030     ENDIF
  105. 2040     IF ERR_CHK <> 0 THEN *L_GET_DIR
  106. 2050     GOSUB *GET_FILENAME
  107. 2060 RETURN
  108. 2070 '
  109. 2080 *GET_FILENAME
  110. 2090     ERR_CHK = 0
  111. 2100     PRINT "保存ファイル名を入力してください。(ANK 5文字以内。現在は";SAVE_FILE$;")";
  112. 2110     INPUT TEMP_FILE$
  113. 2120     IF TEMP_FILE$ <> "" THEN
  114. 2130         IF LEN(TEMP_FILE$) > 5 THEN
  115. 2140             PRINT "長すぎます(5文字以内)"
  116. 2150             ERR_CHK = 1
  117. 2160         ELSE
  118. 2170             TEST_FILE$ = SAVE_DRV$ + SAVE_DIR$ + "\" + TEMP_FILE$ + "001.tif"
  119. 2180             GOSUB *TEST_FILE
  120. 2190             IF TEST_ERR = 0 THEN
  121. 2192                 ERR_CHK = 0
  122. 2193                 SAVE_FILE$ = TEMP_FILE$
  123. 2210             ELSE
  124. 2215                 PRINT "指定したファイルは既に存在しています"
  125. 2220                 ERR_CHK = 1
  126. 2240             ENDIF
  127. 2250         ENDIF
  128. 2260     ENDIF
  129. 2270     IF ERR_CHK <> 0 THEN *GET_FILENAME
  130. 2280 RETURN
  131. 2290 '
  132. 2300 *TEST_DRV
  133. 2310     ON ERROR GOTO *IO_ERROR
  134. 2320     IO_ERR = 0
  135. 2330     SHELL TEST_DRV$
  136. 2340     IF IO_ERR <> 0 THEN TEST_ERR = 1 ELSE TEST_ERR = 0
  137. 2350     ON ERROR GOTO 0
  138. 2360 RETURN
  139. 2370 '
  140. 2380 *TEST_PATH
  141. 2390     ON ERROR GOTO *IO_ERROR
  142. 2400     IO_ERR = 0
  143. 2410     SHELL "chdir "+TEST_PATH$
  144. 2420     IF IO_ERR = 63 THEN
  145. 2425         PRINT "指定したディレクトリは存在しません"
  146. 2430         INPUT "ディレクトリを作成しますか(1=Yes,0=No)",TEST_ANSWER
  147. 2440         IF TEST_ANSWER = 1 THEN
  148. 2450             SHELL "mkdir "+TEST_PATH$
  149. 2460             TEST_ERR = 0
  150. 2470         ELSE
  151. 2480             TEST_ERR = 1
  152. 2490         ENDIF
  153. 2500     ELSE IF IO_ERR <> 0 THEN
  154. 2510         TEST_ERR = 1
  155. 2520     ELSE
  156. 2530         TEST_ERR = 0
  157. 2540     ENDIF
  158. 2550     ON ERROR GOTO 0
  159. 2560 RETURN
  160. 2570 '
  161. 2580 *TEST_FILE
  162. 2590     ON ERROR GOTO *IO_ERROR
  163. 2600     IO_ERR = 0
  164. 2610     LOAD@ TEST_FILE$
  165. 2620     IF IO_ERR = 63 THEN TEST_ERR = 0 ELSE TEST_ERR = 1
  166. 2640     ON ERROR GOTO 0
  167. 2650 RETURN
  168. 2660 '
  169. 2670 *IO_ERROR
  170. 2680     IO_ERR = ERR
  171. 2690     SIMPOSE 0
  172. 2700     SCREEN 0
  173. 2710     IF ERR = 60 THEN
  174. 2720         PRINT "指定したドライブは使えません"
  175. 2730     ELSE IF ERR = 67 THEN
  176. 2740         PRINT "指定したドライブには空き領域がありません"
  177. 2750     ELSE IF ERR = 75 THEN
  178. 2760         PRINT "指定したドライブへのアクセスが拒否されました"
  179. 2770     ELSE IF ERR = 64 THEN
  180. 2780         PRINT "指定したファイル名は既に同じディレクトリに存在しています"
  181. 2790     ELSE IF ERR = 63 THEN
  182. 2800 '        PRINT "指定したディレクトリはありません"
  183. 2805         PRINT "少々お待ちください"
  184. 2810     ELSE IF ERR = 55 THEN
  185. 2820         PRINT "ファイル名の記述に誤りがあります"
  186. 2830     ELSE
  187. 2840         PRINT "とにかく何か間違っています"
  188. 2850     ENDIF
  189. 2860 RESUME NEXT
  190. 2870 '
  191. 2880 *GET_USEMF
  192. 2890     INPUT "平均値フィルターを使いますか(1=Yes,0=No)",USE_MF
  193. 2900     IF USE_MF = 1 THEN
  194. 2910         GOSUB *GET_MFNUM
  195. 2920         GOSUB *GET_MFGAIN
  196. 2930     ENDIF
  197. 2940 RETURN
  198. 2950 '
  199. 2960 *GET_MFNUM
  200. 2970     INPUT "サンプリング枚数を入力してください(2-128)",MF_NUM
  201. 2980     IF MF_NUM < 2 OR MF_NUM > 128 THEN *GET_MFNUM
  202. 2990 RETURN
  203. 3000 '
  204. 3010 *GET_MFGAIN
  205. 3020     GAIN_MIN! = MF_NUM / 254
  206. 3030     GAIN_MAX! = MF_NUM
  207. 3040     PRINT "ゲイン調整値を入力してください(";GAIN_MIN!;"-";GAIN_MAX!;")";
  208. 3050     INPUT MF_GAIN!
  209. 3060     IF MF_GAIN! < GAIN_MIN! OR MF_GAIN! > GAIN_MAX! THEN *GET_MFGAIN
  210. 3070 RETURN
  211. 3080 '
  212. 3090 *MF_INPUT
  213. 3100     FOR MF_LOOP = 1 TO MF_NUM
  214. 3110         SIMPOSE 3
  215. 3120         SIMPOSE 1
  216. 3130         GET@A (0,0)-(319,239),NEWPIC
  217. 3140         CALLM 0,BASEPIC_PTR&,NEWPIC_PTR&
  218. 3150     NEXT MF_LOOP
  219. 3160     CALLM 5,BASEPIC_PTR&,NEWPIC_PTR&,CINT(MF_NUM/MF_GAIN!)
  220. 3170     PUT@A (0,0)-(319,239),NEWPIC
  221. 3180 RETURN
  222. 3190 '
  223. 3200 *TEST_INPUT
  224. 3210     CLS
  225. 3220     SIMPOSE 3
  226. 3230     OP = 0
  227. 3240     WHILE OP = 0
  228. 3250         PD1 = PTRIG(1)
  229. 3260         PD2 = PTRIG(2)
  230. 3270         IF PD1 = 1 OR PD2 = 1 THEN OP = 1
  231. 3280         IF PD1 = 2 OR PD2 = 2 THEN OP = 9
  232. 3290     WEND
  233. 3300         IF OP = 1 THEN
  234. 3310             IF USE_MF = 1 THEN
  235. 3320                 GOSUB *MF_INPUT
  236. 3330             ELSE
  237. 3340                 SIMPOSE 1
  238. 3350             ENDIF
  239. 3360         ENDIF
  240. 3370         SIMPOSE 0
  241. 3380 *L_TI_LOOP
  242. 3390     IF PTRIG(1) = 0 AND PTRIG(2) = 0 THEN *L_TI_LOOP
  243. 3400 RETURN
  244. 3410 '
  245. 3420 *VIDEO_INPUT
  246. 3430     TEST_FILE$ = SAVE_DRV$ + SAVE_DIR$ + "\" + SAVE_FILE$ + "001.tif"
  247. 3440     GOSUB *TEST_FILE
  248. 3450     IF TEST_ERR <> 0 THEN PRINT "指定したファイルは既に存在しています":A$=INPUT$(1):GOTO *L_VI_EXIT
  249. 3460 '
  250. 3470     COUNTER = 1
  251. 3480     SHELL "chdir " + SAVE_DRV$ + SAVE_DIR$
  252. 3490     CLS
  253. 3500     HTONE = 0
  254. 3510     SIMPOSE 3
  255. 3520 '
  256. 3530 *L_VI_LOOP
  257. 3540     OP = 0
  258. 3550     WHILE OP = 0
  259. 3560         PD1 = PTRIG(1)
  260. 3570         PD2 = PTRIG(2)
  261. 3580         K$  = INKEY$
  262. 3590         IF PD1 = 1 OR PD2 = 1 THEN OP = 1
  263. 3600         IF PD1 = 2 OR PD2 = 2 THEN OP = 9
  264. 3610         IF K$="h" OR K$="H" THEN OP = 2
  265. 3620     WEND
  266. 3630     IF OP = 2 THEN GOSUB *TOG_HALF:GOTO *L_VI_LOOP
  267. 3640     IF OP = 9 THEN *L_VI_EXIT
  268. 3650 '
  269. 3660     IF HTONE = 1 THEN
  270. 3670         GOSUB *HALF_OFF
  271. 3680         IF USE_MF = 1 THEN
  272. 3690             GOSUB *MF_INPUT
  273. 3700         ELSE
  274. 3710             SIMPOSE 3
  275. 3720             SIMPOSE 1
  276. 3730         ENDIF
  277. 3740         GOSUB *SAVE_PIC
  278. 3750         ROLL ,-4
  279. 3760         SYMBOL (8,4),"計"+STR$(COUNTER-1)+"枚",1,1,,,,8
  280. 3770         GOSUB *HALF_ON
  281. 3780     ELSE
  282. 3790         IF USE_MF = 1 THEN
  283. 3800             GOSUB *MF_INPUT
  284. 3810         ELSE
  285. 3820             SIMPOSE 1
  286. 3830         ENDIF
  287. 3840         GOSUB *SAVE_PIC
  288. 3850         SYMBOL (160-32,120-8),"計"+STR$(COUNTER-1)+"枚",1,1,,,,8
  289. 3860         WAIT 100
  290. 3870         SIMPOSE 3
  291. 3880     ENDIF
  292. 3890 '
  293. 3900     GOTO *L_VI_LOOP
  294. 3910 *L_VI_EXIT
  295. 3920     SIMPOSE 0:SCREEN 0
  296. 3930 RETURN
  297. 3940 '
  298. 3950 *SAVE_PIC
  299. 3960     A$  = STR$(COUNTER)
  300. 3970     SV$ = SAVE_DRV$ + SAVE_DIR$ + "\" + SAVE_FILE$ + RIGHT$("00"+RIGHT$(A$,LEN(A$)-1),3) + ".tif"
  301. 3980     SAVE@ SV$,(0,0)-(319,239),0,1
  302. 3990     COUNTER = COUNTER + 1
  303. 4000 RETURN
  304. 4010 '
  305. 4020 *TOG_HALF
  306. 4030     IF HTONE = 0 THEN
  307. 4040         IF COUNTER > 1 THEN
  308. 4050             SIMPOSE 1
  309. 4060             A$  = STR$(COUNTER-1)
  310. 4070             SV$ = SAVE_DRV$ + SAVE_DIR$ + "\" + SAVE_FILE$ + RIGHT$("00"+RIGHT$(A$,LEN(A$)-1),3) + ".tif"
  311. 4080             LOAD@ SV$
  312. 4090             ROLL ,-4
  313. 4100         ENDIF
  314. 4110         GOSUB *HALF_ON
  315. 4120         HTONE = 1
  316. 4130     ELSE
  317. 4140         GOSUB *HALF_OFF
  318. 4150         HTONE = 0
  319. 4160         SIMPOSE 3
  320. 4170     ENDIF
  321. 4180 RETURN
  322. 4190 '
  323. 4200 *HALF_ON
  324. 4210     SIMPOSE 1
  325. 4220     OUT &H440,&H1E
  326. 4230     OUT &H442,&H0B
  327. 4240 RETURN
  328. 4250 '
  329. 4260 *HALF_OFF
  330. 4270     OUT &H440,&H1E
  331. 4280     OUT &H442,&H03
  332. 4290 RETURN
  333.